# ДЗ

Требуется реализовать методы в `Tree.cs`, и проверить их тестами `TreeTest.cs`

*Запуск тестов:* 
**Visual Studio**
Откройте обозреватель тестов, выбрав Тест > Обозреватель тестов в верхней строке меню (или нажмите клавиши CTRL + E, T).
Запустите модульные тесты, нажав Запустить все (или нажмите клавиши CTRL + R, V).

## 1. Изучение вирусов

★★☆☆☆

Вы работаете в отделе по изучению вирусов. Появился новый вирус, который эволюционирует и распространяется с невиданной
скоростью. Перед вами поставили задачу, найти максимальную длину цепочки из штаммов вируса:
В классе `Tree.cs` реализовать метод

```C#
public static int FromList(Node root)
```

Метод получает ссылку на корень поддерева и должен вернуть максимальную глубину.

## 2. Чтение данных из базы

★★★☆☆

Ваши коллеги реализовали выгрузку базы вирусов из файла. Вам необходимо реализовать метод, который будет принимать
массив индексов и массив из описаний вирусов и возвращать ссылку на корень получившейся структуры.

Длина передаваемых массивов индексов и описаний всегда равны.

Реализуйте метод:

```C#
public static Node FromList(int[] index, Virus[] elements) 
```

## 3. Быстрый поиск вирусов одного поколения

★★★☆☆

Следующей задачей, которую вам необходимо выполнить - реализовать метод поиска всех видов вируса,
относящихся к одному поколению. Вам необходимо найти все вирусы по номеру поколения, и
их список. Для этого реализуйте метод:

```C#
public static List<Node> AllOnCurrDepth(Node root, int generation)
```

## 4. Поиск общего предка

★★★☆☆

Часто нужно знать от какого вируса произошли конкретные два штамма. Для этого вы должны реализовать 
метод, который принимает два штамма и возвращает их самого ближайшего предка. Реализуйте метод:

```C#
public static Node lca(Node first, Node second)
```

